package sid

import (
	"crypto/rand"
	"math/big"
	"strconv"
	"time"
)

// GenerateComplexBookID 生成复杂的11位图书编号
func GenerateComplexBookID() int {
	const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
	bookID := make([]byte, 11)

	// 使用当前时间戳的一部分
	currentTime := time.Now().UnixNano()       // 纳秒级时间戳
	seed := strconv.FormatInt(currentTime, 36) // 转为36进制字符串

	// 将时间戳的一部分添加到编号的开头
	bookID = append([]byte(seed), bookID[:len(bookID)-len(seed)]...)

	for i := len(seed); i < len(bookID); i++ {
		randomIndex := randomInt(0, len(charset))
		bookID[i] = charset[randomIndex]
	}

	bookIDInt, err := strconv.ParseInt(string(bookID[:11]), 36, 0)
	if err != nil {
		return 0 // 返回0或进行其他处理
	}

	// 组合成字符串并取前11位
	return int(bookIDInt)
}

// 随机生成指定范围内的整数
func randomInt(min int, max int) int {
	n, _ := rand.Int(rand.Reader, big.NewInt(int64(max-min)))
	return int(n.Int64()) + min
}
